<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // promise里的then方法
        // 每一个promise对象会有一个then方法
        // then方法有两种回调,onResolved和onRejected
        let p = new Promise((resolve, reject) => {
            resolve('success')
            // reject('fail')
        })
        // p.then(function(){
        //     // onResolved : 成功状态的promise会执行这里
        //     console.log('成功了');
        // },function(){
        //     // onRejected : 失败状态的promise会执行这里
        //     console.log('失败了');
        // })
        // 都会接受promise对象的结果值 promiseResult;
        // 可以省略onRejected

        // 2-then的返回值
        // let s = p.then(function (res) {
        //     // onResolved : 成功状态的promise会执行这里
        //     // return ':·.'

        //     // return new Promise((resolve,reject)=>{
        //     //     reject('error')
        //     // })

        //     // throw Error('报错')
        // }, res => {
        //     // onRejected : 失败状态的promise会执行这里
        //     console.log('失败了', res);
        // })
        // console.log(s);
        // 返还值的四种情况
        // (1)无返回值 : 返还promise对象
        // (2)返还值   : 会把返还值作为下一个promise的promiseResult结果值返还,结果还是promise对象
        // (3)返还一个promise对象 : 把这个promise对象原封不动的返还
        // (4)抛出了错误 : 返还一个rejected的promise对象,值就是报错内容
    
        // 因为then会返还一个promise对象
        // 所以then可以链式调用
        let s2 = p.then(res=>{
            return 123
        })
        let s3 = s2.then(res=>{
            console.log(res); // 123
        })
        let s4 = s3.then(res=>{
            console.log(res); // undefined,s3的PromiseResult就是undefined
            return '666'
        })

        let s5 = s4.then(res=>{
            console.log(res);   // 666
        })
    
    </script>
</body>

</html>